/**
 * 管理socket_id 与member_id device_id 直接的绑定关系
 */
class User{
    /**
     * @param {object} io Socket对象实例
     */
    constructor(io){
        this.io=io;
        this.users={};
    }
    /**
     * 增加设备用户
     * @param {string}  socket_id socket连接ID
     * @param {integer} member_id 用户ID
     * @param {integer} device_id 设备ID
     */
    add(socket_id,member_id,device_id){
        if(this.users[member_id]){
            this.users[member_id][device_id]=[socket_id,device_id];
        }else{
            this.users[member_id]={
                [device_id]:[socket_id,device_id],
            };
        }
        // 同步web服务器用户在线设备
        this.syncDevices(member_id);
    }
    /**
     * 移除设备用户
     * @param {integer} member_id 用户ID
     * @param {integer} device_id 设备ID
     */
    remove(member_id,device_id){
        if(this.users[member_id]&&this.users[member_id][device_id]){
            delete this.users[member_id][device_id];
        }
    }
    /**
     * 获取用户socket.id 实现单聊
     * @param {integer} member_id 用户ID
     * @param {integer} device_id 设备ID
     */
    getSocketId(member_id,device_id){
        if(!member_id||!device_id)return;
        if(this.users[member_id]){
            let device=this.users[member_id][device_id];
            if(device){
                return device[0];
            }
        }
    }
    /**
     * 同步web服务器用户在线设备
     * @param {integer} member_id 用户ID
     */
    syncDevices(member_id){
        let devices=this.users[member_id];
        if(devices){
            this.io.to(member_id.toString()+'admin').emit('getUsers',Object.keys(devices));
        }
    }
}
module.exports=User;